#ifndef _DATATYPE_H_
#define _DATATYPE_H_


#ifdef CHIP_6747
#define     u64 unsigned long long
#define     i64 long long
#else
u32         CSR;
u32         IER;
u32         IRP;
u32         ICR;
u32         ISTP;
#define     u64  unsigned _int64
#define     Int64  _int64
#endif

#ifndef	CHIP_6747
#define interrupt
#endif

#define     SUCCESS         0x00
#define     FAILED          0x01

#define     True            1
#define     False           0

//----------------------------------------------------------
//--program run status define
//----------------------------------------------------------
#define Status_Fly                  0x11    //0x11：正式飞行
#define Status_MF                   0x22    //0x22：模拟飞行测试
//------[ 增加极性检查状态 8/10/2021 zhangqian]-------------------
#define Status_Polar1               0x33    //0x33：一级主动段栅格舵极性检查
#define Status_Polar2               0x44    //0x44：二级主动段极性检查
#define Status_Polar3               0x55    //0x55：二级滑行段I极性检查
#define Status_Polar4               0x66    //0x66：二级滑行段II极性检查
#define Status_Polar5               0x77    //0x77：三级飞行段极性检查
//#define Status_Polar6               0x88    //0x88：上面级主动段极性检查

#define Status_True                 0x55    //使用状态
#define Status_False                0x00    //搭载状态


#ifdef  _VC_SIMU
#pragma warning (disable:4244)
#pragma warning (disable:4305)
#endif

#define     SAVE_Wide       30
#define     SAVE_Len        30000

#define SIZE_256K           0x40000//256*1024
#define SIZE_512K           0x80000//512*1024



#define S2_ZD_SIZE		400//巡航段制导所需参数，初步定为400行



//------[ 根据任务书要求修改装订参数 8/20/2021 zhangqian]-------------------
typedef struct
{
    //------------[ 加入极性检查和精度检查标志 2/26/2021 by zhangqian ]----------------------
    //标志位
    u8 Run_Status;//软件运行状态位［0x11/正式飞行　0x22/模拟飞行测试　0x33/一级主动段极性检查　0x44/二级主动段极性检查　0x55/二级滑行段极性检查　0x66/上面级滑行段抛罩前极性检查　0x77/上面级滑行段抛罩后极性检查　0x88/上面级主动段极性检查］
    u8 GPS_Status;//GPS搭载状态       0x55    使用  ||  0x00    搭载
   u16 Temp1, Temp2, Temp3;
    //////////////////////////////////////////////////////////////////////////

    //////////////////////////////////////////////////////////////////////////
    //发射地理参数
    f64 A0;//理论射向   deg 发射方位角
    f64 Phi0;//射角 deg
    f64 A1;//水平状态方位角    deg
    f64 Gamma0;//竖直状态初始滚动角  deg 弹体的初始滚动角γ0
    f64 L0, B0, H0;//发射点经度-deg,发射点纬度-deg,发射点高度,
    f64 G0; //重力加速度
    //////////////////////////////////////////////////////////////////////////
    dVector3_Struct Pm;//目标点X,Y,Z信息
    f64 LandAngle;//落角 deg

    f64 S21_V;//巡航发动机点火点速度(m/s)
    u16 X1,X2,X3,X4;//特征点1-4(m)
    //////////////////////////////////////////////////////////////////////////
    // 装订插值表
    //ZDZY2包括巡航段制导所需参数
    f64 T_S2_X[S2_ZD_SIZE], T_S2_Theta[S2_ZD_SIZE], T_S2_H[S2_ZD_SIZE];
    f64 T_S2_Vu[S2_ZD_SIZE], T_S2_Sigma[S2_ZD_SIZE], T_S2_Z[S2_ZD_SIZE], T_S2_Vz[S2_ZD_SIZE];
}bind_data_struct;


typedef union
{
    struct
    {
        //////////////////////////////////////////////////////////////////////////
        //--------------[ 制导插值表 14:23 5/6/2023 zhangqian]-------------------
        //////////////////////////////////////////////////////////////////////////
        //标准大气密度和声速数据表
        f64 Tb_RoV_H[101];//插值高度表
        f64 Tb_RoV_Ro[101];//插值大气密度表
        f64 Tb_RoV_V[101];//插值大气声速表
		
		//时间-质量插值表
		f64 Tb_Mt_T[4];
		f64 Tb_Mt_M[4];

        //升力以及侧向力系数插值表
        f32 Tb_CLCZ_Alpha[11];//攻角插值表(deg)
        f32 Tb_CLCZ_Ma[9];//马赫数插值表
        f32 Tb_CLCZ_T[4];//时间插值表
        f32 Tb_CLCZ_CL[396];//升力系数表
        f32 Tb_CLCZ_CZ[396];//侧向力系数表

        //////////////////////////////////////////////////////////////////////////
        //--------------[ 姿控插值表 14:23 5/6/2023 zhangqian]-------------------
        //////////////////////////////////////////////////////////////////////////
        //表1  俯仰、偏航和滚动通道空气舵起控平滑算法参数插值表
        //T(s)  0       0.02    0.04    0.06    0.08    0.10
        //PH    0.05    0.04    0.03    0.02    0.01    0
        f32 Tb_PH_Tx[6];
        f32 Tb_PH_Ty[6];

        //表1  一级飞行段滚动通道稳定网络参数插值表
        f32 Tb_S1_Ma[13], Tb_S1_H[19], Tb_S1_T[13];
		f32 Tb_S1_Kw_r[3211];
		f32 Tb_S1_Kiw_r[3211];
		f32 Tb_S1_Kniw_r[3211];

        //附表B.1  二级滑行段Ⅰ稳定网络参数插值数组
		//二级滑行段Ⅰ稳定网络参数和进行插值计算时，先将对应列转换成7*7*7*6四维数组
        //  ，插值变量顺序依次为攻角、侧滑角、马赫数Ma、绝对高度，插值变量数组为：
        f32 Tb_S20_Alpha[7];
        f32 Tb_S20_Beta[7];
        f32 Tb_S20_Ma[7];
        f32 Tb_S20_H[7];

		f32 Tb_S20_Kw_p[2401];
		f32 Tb_S20_Kiw_p[2401];
		f32 Tb_S20_Kniw_p[2401];
		f32 Tb_S20_Kw_y[2401];
		f32 Tb_S20_Kiw_y[2401];
		f32 Tb_S20_Kniw_y[2401];
		f32 Tb_S20_Kw_r[2401];
		f32 Tb_S20_Kiw_r[2401];
		f32 Tb_S20_Kniw_r[2401];        
        //////////////////////////////////////////////////////////////////////////
        //附表B.2  二级主动段稳定网络参数插值数组
        //二级主动段稳定网络参数K_(w_p)、K_(iw_p)、K_(niw_p)、K_(w_y)、K_(iw_y)、K_(niw_y)、K_(w_r)、K_(iw_r)和K_(niw_r)进行插值计算时，
        //先将对应列转换成7*5*6*8*5五维数组，插值变量顺序依次为攻角α、侧滑角β、马赫数Ma、绝对高度H_abs、二级主动段飞行时间T_zd，插值变量数组为：
        f32 Tb_S21_Alpha[7];
        f32 Tb_S21_Beta[5];
        f32 Tb_S21_Ma[6];
        f32 Tb_S21_H[8];
        f32 Tb_S21_Tzd[5];

        f32 Tb_S21_Kw_p[8400];
        f32 Tb_S21_Kiw_p[8400];
        f32 Tb_S21_Kniw_p[8400];
        f32 Tb_S21_Kw_y[8400];
        f32 Tb_S21_Kiw_y[8400];
        f32 Tb_S21_Kniw_y[8400];
        f32 Tb_S21_Kw_r[8400];
        f32 Tb_S21_Kiw_r[8400];
        f32 Tb_S21_Kniw_r[8400];
        //////////////////////////////////////////////////////////////////////////
        //附表B.3  二级滑行段Ⅱ稳定网络参数插值数组
        //二级滑行段Ⅱ稳定网络参数K_(w_p)、K_(iw_p)、K_(niw_p)、K_(w_y)、K_(iw_y)、K_(niw_y)、K_(w_r)、K_(iw_r)和K_(niw_r)进行插值计算时，
        //先将对应列转换成成7*7*5*7四维数组，插值变量顺序依次为攻角α、侧滑角β、马赫数Ma、绝对高度H_abs，插值变量数组为：
        f32 Tb_S22_Alpha[7];
        f32 Tb_S22_Beta[7];
        f32 Tb_S22_Ma[5];
        f32 Tb_S22_H[7];

        f32 Tb_S22_Kw_p[1715];
        f32 Tb_S22_Kiw_p[1715];
        f32 Tb_S22_Kniw_p[1715];
        f32 Tb_S22_Kw_y[1715];
        f32 Tb_S22_Kiw_y[1715];
        f32 Tb_S22_Kniw_y[1715];
        f32 Tb_S22_Kw_r[1715];
        f32 Tb_S22_Kiw_r[1715];
        f32 Tb_S22_Kniw_r[1715];
    }u;
    u8 d[SIZE_512K];
}g_data_struct;//插值表数据


////--------------[ 在线升级程序存放处 16:23 5/19/2023 zhangqian]-------------------
//#define  UPGRADE_LEN		0x80000
//typedef struct
//{
//	u8 data[UPGRADE_LEN];
//}upgrade_struct;



#endif

